From c8b58228d60d187dade6c4a59ad953f4fe44fb98 Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Mon, 22 Oct 2001 21:01:47 +0000 Subject: [PATCH] Add cursor-position, selection-bound properties. (#62148, reported by Mon Oct 22 11:47:47 2001 Owen Taylor * gtk/gtklabel.c: Add cursor-position, selection-bound properties. (#62148, reported by Padraig O'Briain) * gtk/gtkentry.c (gtk_entry_class_init): Rename text_position to cursor_position. (1.3.x addition, text_position is an awful name.) Make cursor_position read-only to avoid sticky questions of interaction with selection_bound. (#62636, reported by Padraig O'Briain) --- ChangeLog | 12 +++++++- ChangeLog.pre-2-0 | 12 +++++++- ChangeLog.pre-2-10 | 12 +++++++- ChangeLog.pre-2-2 | 12 +++++++- ChangeLog.pre-2-4 | 12 +++++++- ChangeLog.pre-2-6 | 12 +++++++- ChangeLog.pre-2-8 | 12 +++++++- gtk/gtkentry.c | 42 ++++++++++++++++++--------- gtk/gtklabel.c | 71 +++++++++++++++++++++++++++++++++++++++------- 9 files changed, 166 insertions(+), 31 deletions(-) diff --git a/ChangeLog b/ChangeLog index e0bc24e669..5bec5fbaf4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +Mon Oct 22 11:47:47 2001 Owen Taylor + + * gtk/gtklabel.c: Add cursor-position, selection-bound + properties. (#62148, Reported by Padraig O'briain) + + * gtk/gtkentry.c (gtk_entry_class_init): Rename text_position + to cursor_position. (1.3.x addition, text_position is an awful + name.) Make cursor_position read-only to avoid sticky questions + of interaction with selection_bound. + Mon Oct 22 16:25:12 2001 Owen Taylor Fixing popup menus to have "Paste" sensitized correctly. Original @@ -4515,7 +4525,7 @@ Mon Jun 4 12:50:11 2001 Owen Taylor 2001-06-04 Havoc Pennington * gdk/x11/gdkevents-x11.c (gdk_event_translate): Ignore - releases for buttons 6, 7 +r eleases for buttons 6, 7 2001-06-04 Havoc Pennington diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index e0bc24e669..5bec5fbaf4 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,13 @@ +Mon Oct 22 11:47:47 2001 Owen Taylor + + * gtk/gtklabel.c: Add cursor-position, selection-bound + properties. (#62148, Reported by Padraig O'briain) + + * gtk/gtkentry.c (gtk_entry_class_init): Rename text_position + to cursor_position. (1.3.x addition, text_position is an awful + name.) Make cursor_position read-only to avoid sticky questions + of interaction with selection_bound. + Mon Oct 22 16:25:12 2001 Owen Taylor Fixing popup menus to have "Paste" sensitized correctly. Original @@ -4515,7 +4525,7 @@ Mon Jun 4 12:50:11 2001 Owen Taylor 2001-06-04 Havoc Pennington * gdk/x11/gdkevents-x11.c (gdk_event_translate): Ignore - releases for buttons 6, 7 +r eleases for buttons 6, 7 2001-06-04 Havoc Pennington diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index e0bc24e669..5bec5fbaf4 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,13 @@ +Mon Oct 22 11:47:47 2001 Owen Taylor + + * gtk/gtklabel.c: Add cursor-position, selection-bound + properties. (#62148, Reported by Padraig O'briain) + + * gtk/gtkentry.c (gtk_entry_class_init): Rename text_position + to cursor_position. (1.3.x addition, text_position is an awful + name.) Make cursor_position read-only to avoid sticky questions + of interaction with selection_bound. + Mon Oct 22 16:25:12 2001 Owen Taylor Fixing popup menus to have "Paste" sensitized correctly. Original @@ -4515,7 +4525,7 @@ Mon Jun 4 12:50:11 2001 Owen Taylor 2001-06-04 Havoc Pennington * gdk/x11/gdkevents-x11.c (gdk_event_translate): Ignore - releases for buttons 6, 7 +r eleases for buttons 6, 7 2001-06-04 Havoc Pennington diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index e0bc24e669..5bec5fbaf4 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,13 @@ +Mon Oct 22 11:47:47 2001 Owen Taylor + + * gtk/gtklabel.c: Add cursor-position, selection-bound + properties. (#62148, Reported by Padraig O'briain) + + * gtk/gtkentry.c (gtk_entry_class_init): Rename text_position + to cursor_position. (1.3.x addition, text_position is an awful + name.) Make cursor_position read-only to avoid sticky questions + of interaction with selection_bound. + Mon Oct 22 16:25:12 2001 Owen Taylor Fixing popup menus to have "Paste" sensitized correctly. Original @@ -4515,7 +4525,7 @@ Mon Jun 4 12:50:11 2001 Owen Taylor 2001-06-04 Havoc Pennington * gdk/x11/gdkevents-x11.c (gdk_event_translate): Ignore - releases for buttons 6, 7 +r eleases for buttons 6, 7 2001-06-04 Havoc Pennington diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index e0bc24e669..5bec5fbaf4 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,13 @@ +Mon Oct 22 11:47:47 2001 Owen Taylor + + * gtk/gtklabel.c: Add cursor-position, selection-bound + properties. (#62148, Reported by Padraig O'briain) + + * gtk/gtkentry.c (gtk_entry_class_init): Rename text_position + to cursor_position. (1.3.x addition, text_position is an awful + name.) Make cursor_position read-only to avoid sticky questions + of interaction with selection_bound. + Mon Oct 22 16:25:12 2001 Owen Taylor Fixing popup menus to have "Paste" sensitized correctly. Original @@ -4515,7 +4525,7 @@ Mon Jun 4 12:50:11 2001 Owen Taylor 2001-06-04 Havoc Pennington * gdk/x11/gdkevents-x11.c (gdk_event_translate): Ignore - releases for buttons 6, 7 +r eleases for buttons 6, 7 2001-06-04 Havoc Pennington diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index e0bc24e669..5bec5fbaf4 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,13 @@ +Mon Oct 22 11:47:47 2001 Owen Taylor + + * gtk/gtklabel.c: Add cursor-position, selection-bound + properties. (#62148, Reported by Padraig O'briain) + + * gtk/gtkentry.c (gtk_entry_class_init): Rename text_position + to cursor_position. (1.3.x addition, text_position is an awful + name.) Make cursor_position read-only to avoid sticky questions + of interaction with selection_bound. + Mon Oct 22 16:25:12 2001 Owen Taylor Fixing popup menus to have "Paste" sensitized correctly. Original @@ -4515,7 +4525,7 @@ Mon Jun 4 12:50:11 2001 Owen Taylor 2001-06-04 Havoc Pennington * gdk/x11/gdkevents-x11.c (gdk_event_translate): Ignore - releases for buttons 6, 7 +r eleases for buttons 6, 7 2001-06-04 Havoc Pennington diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index e0bc24e669..5bec5fbaf4 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,13 @@ +Mon Oct 22 11:47:47 2001 Owen Taylor + + * gtk/gtklabel.c: Add cursor-position, selection-bound + properties. (#62148, Reported by Padraig O'briain) + + * gtk/gtkentry.c (gtk_entry_class_init): Rename text_position + to cursor_position. (1.3.x addition, text_position is an awful + name.) Make cursor_position read-only to avoid sticky questions + of interaction with selection_bound. + Mon Oct 22 16:25:12 2001 Owen Taylor Fixing popup menus to have "Paste" sensitized correctly. Original @@ -4515,7 +4525,7 @@ Mon Jun 4 12:50:11 2001 Owen Taylor 2001-06-04 Havoc Pennington * gdk/x11/gdkevents-x11.c (gdk_event_translate): Ignore - releases for buttons 6, 7 +r eleases for buttons 6, 7 2001-06-04 Havoc Pennington diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index d993ad1d88..d12ccf4afd 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -70,7 +70,8 @@ enum { enum { PROP_0, - PROP_TEXT_POSITION, + PROP_CURSOR_POSITION, + PROP_SELECTION_BOUND, PROP_EDITABLE, PROP_MAX_LENGTH, PROP_VISIBILITY, @@ -402,14 +403,24 @@ gtk_entry_class_init (GtkEntryClass *class) class->activate = gtk_entry_real_activate; g_object_class_install_property (gobject_class, - PROP_TEXT_POSITION, - g_param_spec_int ("text_position", - _("Text Position"), - _("The current position of the insertion point"), + PROP_CURSOR_POSITION, + g_param_spec_int ("cursor_position", + _("Cursor Position"), + _("The current position of the insertion cursor in chars."), 0, G_MAXINT, 0, - G_PARAM_READABLE | G_PARAM_WRITABLE)); + G_PARAM_READABLE)); + + g_object_class_install_property (gobject_class, + PROP_SELECTION_BOUND, + g_param_spec_int ("selection_bound", + _("Selection Bound"), + _("The position of the opposite end of the selection from the cursor in chars."), + 0, + G_MAXINT, + 0, + G_PARAM_READABLE)); g_object_class_install_property (gobject_class, PROP_EDITABLE, @@ -775,11 +786,6 @@ gtk_entry_set_property (GObject *object, switch (prop_id) { - case PROP_TEXT_POSITION: - gtk_editable_set_position (GTK_EDITABLE (object), - g_value_get_int (value)); - break; - case PROP_EDITABLE: { gboolean new_value = g_value_get_boolean (value); @@ -821,6 +827,7 @@ gtk_entry_set_property (GObject *object, break; case PROP_SCROLL_OFFSET: + case PROP_CURSOR_POSITION: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -839,9 +846,12 @@ gtk_entry_get_property (GObject *object, switch (prop_id) { - case PROP_TEXT_POSITION: + case PROP_CURSOR_POSITION: g_value_set_int (value, entry->current_pos); break; + case PROP_SELECTION_BOUND: + g_value_set_int (value, entry->selection_bound); + break; case PROP_EDITABLE: g_value_set_boolean (value, entry->editable); break; @@ -2272,6 +2282,8 @@ gtk_entry_set_positions (GtkEntry *entry, gint selection_bound) { gboolean changed = FALSE; + + g_object_freeze_notify (G_OBJECT (entry)); if (current_pos != -1 && entry->current_pos != current_pos) @@ -2279,7 +2291,7 @@ gtk_entry_set_positions (GtkEntry *entry, entry->current_pos = current_pos; changed = TRUE; - g_object_notify (G_OBJECT (entry), "text_position"); + g_object_notify (G_OBJECT (entry), "cursor_position"); } if (selection_bound != -1 && @@ -2287,8 +2299,12 @@ gtk_entry_set_positions (GtkEntry *entry, { entry->selection_bound = selection_bound; changed = TRUE; + + g_object_notify (G_OBJECT (entry), "selection_bound"); } + g_object_thaw_notify (G_OBJECT (entry)); + if (changed) gtk_entry_recompute (entry); } diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c index 8fe045936a..b682a8a954 100644 --- a/gtk/gtklabel.c +++ b/gtk/gtklabel.c @@ -66,7 +66,9 @@ enum { PROP_WRAP, PROP_SELECTABLE, PROP_MNEMONIC_KEYVAL, - PROP_MNEMONIC_WIDGET + PROP_MNEMONIC_WIDGET, + PROP_CURSOR_POSITION, + PROP_SELECTION_BOUND }; static guint signals[LAST_SIGNAL] = { 0 }; @@ -351,6 +353,26 @@ gtk_label_class_init (GtkLabelClass *class) GTK_TYPE_WIDGET, G_PARAM_READWRITE)); + g_object_class_install_property (gobject_class, + PROP_CURSOR_POSITION, + g_param_spec_int ("cursor_position", + _("Cursor Position"), + _("The current position of the insertion cursor in chars."), + 0, + G_MAXINT, + 0, + G_PARAM_READABLE)); + + g_object_class_install_property (gobject_class, + PROP_SELECTION_BOUND, + g_param_spec_int ("selection_bound", + _("Selection Bound"), + _("The position of the opposite end of the selection from the cursor in chars."), + 0, + G_MAXINT, + 0, + G_PARAM_READABLE)); + gtk_widget_class_install_style_property (widget_class, g_param_spec_boxed ("cursor_color", _("Cursor color"), @@ -522,6 +544,26 @@ gtk_label_get_property (GObject *object, case PROP_MNEMONIC_WIDGET: g_value_set_object (value, (GObject*) label->mnemonic_widget); break; + case PROP_CURSOR_POSITION: + if (label->select_info) + { + gint offset = g_utf8_pointer_to_offset (label->label, + label->label + label->select_info->selection_end); + g_value_set_int (value, offset); + } + else + g_value_set_int (value, 0); + break; + case PROP_SELECTION_BOUND: + if (label->select_info) + { + gint offset = g_utf8_pointer_to_offset (label->label, + label->label + label->select_info->selection_anchor); + g_value_set_int (value, offset); + } + else + g_value_set_int (value, 0); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -2139,17 +2181,15 @@ gtk_label_button_press (GtkWidget *widget, min = MIN (min, index); max = MAX (max, index); - gtk_label_select_region_index (label, - min, - max); - /* ensure the anchor is opposite index */ - if (index == label->select_info->selection_anchor) + if (index == min) { - gint tmp = label->select_info->selection_end; - label->select_info->selection_end = label->select_info->selection_anchor; - label->select_info->selection_anchor = tmp; + gint tmp = min; + min = max; + max = tmp; } + + gtk_label_select_region_index (label, min, max); } else { @@ -2332,8 +2372,12 @@ gtk_label_set_selectable (GtkLabel *label, } if (setting != old_setting) { - g_object_notify (G_OBJECT (label), "selectable"); - gtk_widget_queue_draw (GTK_WIDGET (label)); + g_object_freeze_notify (G_OBJECT (label)); + g_object_notify (G_OBJECT (label), "selectable"); + g_object_notify (G_OBJECT (label), "cursor_position"); + g_object_notify (G_OBJECT (label), "selection_bound"); + g_object_thaw_notify (G_OBJECT (label)); + gtk_widget_queue_draw (GTK_WIDGET (label)); } } @@ -2451,6 +2495,11 @@ gtk_label_select_region_index (GtkLabel *label, gtk_label_clear_layout (label); gtk_widget_queue_draw (GTK_WIDGET (label)); + + g_object_freeze_notify (G_OBJECT (label)); + g_object_notify (G_OBJECT (label), "cursor_position"); + g_object_notify (G_OBJECT (label), "selection_bound"); + g_object_thaw_notify (G_OBJECT (label)); } } -- 2.30.2